接下來要跟大家分享的是Observability,Observability 是一個在Cloud Native新興的概念,包含了監測、示警、日誌管理、trace log管理等等,利用可視化的介面分析系統所有signals。以此優化系統效率、確保系統穩定運行,並在系統有問題時能更快速的發現問題點且解決。是在微服務環境下非常重要的一個單元,在監控服務(HAPI FHIR Server)上非常方便。
指標(Metrics):
日誌(Logs):
Tracing:
在微服務架構下,雖然服務的穩定及可用性較單體式架構表現更好,但是在管理上麻煩許多,如果沒有優秀的監控系統和日誌管理工具,在查找問題時會多費很多功夫。
Tracing 則是在複雜的微服務環境中需要引進的監控工具,如果目前的微服務環境沒那麼複雜,可以考慮先不引進Tracing,不過至少要有監控系統和日誌管理工具。
Grafana在Observability工具中推出了完整的服務生態系,包含Metrics(監控系統,Prometheus)、Logs(日誌管理系統,Loki)、Tracing(trace logs,Tempo)再加上Grafana自身好用的GUI介面,可以在同個Grafana服務上註冊多個Resource,用一個Grafana查看所有Resource。
Prometheus:
Metrics的監控後端,對收集來的指標進行分析,並在系統出錯時進行告警(alert manager) 。
Loki:
Logs的管理後端,對程式產生的Log進行分析,建立Label並儲存。
Tempo ( Tracing ):
分散式系統的trace log。
Prometheus是最常見用來監控K8s及其上服務的監控系統,發展得非常成熟,還有豐厚的社群支援,是用來監控K8s環境的一時之選。
日誌管理系統更多人用的是ELK Stack(Elasticsearch、Logstash、Kibana),它的功能強大,支援複雜的檢索且許多服務都有內建相關的適配(HAPI FHIR Server),缺點就是太耗資源,RAM給多少它就會用到滿,如果是配置較差的VM在運行Elasticsearch後就會很緊繃了,而且建置困難。而另一個由Grafana推出的日誌管理系統 ---Loki Stack(Loki、Promtail、Grafana)則是輕量級的框架,建置簡單且不那麼耗資源,缺點就是無法執行較複雜的檢索且許多服務沒有內建相關的適配,需要自己寫。
這兩個日誌管理系統都很不錯,但因為ELK需要耗費的資源太多了,且常常日誌管理也不需要那麼複雜的檢索,所以最後選擇使用Loki Stack來作為當前的日誌管理系統。
而Tracing的部分則是因為當前的系統沒那麼複雜,若是之後有越多越多服務上架,就要開始研究如何使用Tempo了嗚嗚嗚。
接下來的文章會介紹Prometheus和Loki的建置與操作。